package com.example.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * 享元工厂类
 * 负责创建和管理享元对象，确保相同类型的对象只创建一次
 */
public class ShapeFactory {
    
    // 享元对象缓存池
    private static final Map<String, Shape> shapeMap = new HashMap<>();
    
    /**
     * 获取圆形对象
     * 如果缓存中已存在相同半径的圆形，则直接返回
     * 否则创建新的圆形对象并缓存
     * 
     * @param radius 半径
     * @return 圆形对象
     */
    public static Shape getCircle(int radius) {
        String key = "circle_" + radius;
        Shape circle = shapeMap.get(key);
        
        if (circle == null) {
            circle = new Circle(radius);
            shapeMap.put(key, circle);
            System.out.println("缓存新的圆形对象: " + key);
        } else {
            System.out.println("从缓存中获取圆形对象: " + key);
        }
        
        return circle;
    }
    
    /**
     * 获取缓存池中的对象数量
     * @return 缓存对象数量
     */
    public static int getShapeCount() {
        return shapeMap.size();
        
    }
    
    /**
     * 清空缓存池
     */
    public static void clearCache() {
        shapeMap.clear();
        System.out.println("清空享元对象缓存池");
    }
}
